﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NekoVampire.Web;
using System.Security;
using System.IO;

namespace NekoVampire.Twitter
{
    class SendTwitter
    {
        public SendTwitter(string userName, SecureString password)
        {
            this.UserName = userName;
            this.Password = password;
        }

        #region 変数の定義
        private const string API = "http://twitter.com/";
        private const string SOURCE = "NamaAlert";

        private Request request;

        public string UserName
        {
            get
            {
                return request.UserName;
            }
            set
            {
                request.UserName = value;
            }
        }

        public SecureString Password
        {
            get
            {
                return request.SecurePassword;
            }
            set
            {
                request.SecurePassword = value;
            }
        }
        #endregion

        /// <summary>
        /// 自分のステータスを更新(update)する。
        /// </summary>
        /// <param name="status">ステータス</param>
        public void SendUpdate(string status)
        {
            SendUpdate(status, null);
        }

        /// <summary>
        /// 自分のステータスを更新(update)する。
        /// </summary>
        /// <param name="status">ステータス</param>
        public void SendUpdate(string status, Action<Stream> invoker)
        {
            string url = API + "statuses/update.xml";
            Dictionary<string, string> postData = new Dictionary<string, string>();
            postData.Add("status", status);
            postData.Add("source", SOURCE);

            try
            {
                request.HttpRequest(url, "POST", postData, invoker);
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 自分のステータスを更新(update)する。
        /// </summary>
        /// <param name="status">ステータス</param>
        public void SendUpdateAsync(string status)
        {
            SendUpdateAsync(status, null);
        }

        /// <summary>
        /// 自分のステータスを更新(update)する。
        /// </summary>
        /// <param name="status">ステータス</param>
        public void SendUpdateAsync(string status, Action<Stream> invoker)
        {
            string url = API + "statuses/update.xml";
            Dictionary<string, string> postData = new Dictionary<string, string>();
            postData.Add("status", status);
            postData.Add("source", SOURCE);

            try
            {
                request.HttpRequestAsync(url, "POST", postData, invoker);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
